package br.ufrn.cerescaico.sepe.beans;

import br.ufrn.cerescaico.sepe.util.Constantes;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;

/**
 * Classe que representa um trabalho do evento pertencente ao sistema..<br>
 * Sistema de Gerenciamento e Coordenação de Eventos Acadêmicos.
 * @author Taciano Morais Silva - tacianosilva@gmail.com
 * @version 08/06/2010, 12h16m
 * @since 08/06/2010, 12h16m
 */
@Entity
@Table(name = "trabalho")
public class Trabalho implements Bean, Serializable {

    /**
     * Identificador da entidade Trabalho.
     */
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "categoria", nullable=false)
    private String categoria;
    @Column(name = "area", nullable=false)
    private String area;
    @ManyToOne
    @JoinColumn(name = "id_participante")
    private Participante participante;
    @Column(name = "titulo", length=150, nullable=false)
    private String titulo;
    @Column(name = "primeiro_autor_nome", length=100, nullable=false)
    private String primeiroAutorNome;
    private String primeiroautor_titulacao;
    private String primeiroautor_instituicao;
    private String primeiroautor_departamento;
    private String primeiroautor_unidade;
    private String primeiroautor_cidade;
    private String primeiroAutorEstado;
    @Column(name = "primeiro_autor_email", length=100, nullable=false)
    private String primeiroAutorEmail;
    private String coautor1_nome;
    private String coautor1_titulacao;
    private String coautor1_instituicao;
    private String coautor1_departamento;
    private String coautor1_unidade;
    private String coautor1_cidade;
    private String coautor1_estado;
    private String coautor1_email;
    private String coautor2_nome;
    private String coautor2_titulacao;
    private String coautor2_instituicao;
    private String coautor2_departamento;
    private String coautor2_unidade;
    private String coautor2_cidade;
    private String coautor2_estado;
    private String coautor2_email;
    private String orientador_nome;
    private String orientador_titulacao;
    private String orientador_instituicao;
    private String orientador_departamento;
    private String orientador_unidade;
    private String orientador_cidade;
    private String orientador_estado;
    private String orientador_email;
    private String resumo;
    @Column(name = "palavras_chave")
    private String palavrasChave;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataSubmissaoResumo;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataUltimaAtualizacaoResumo;
    @Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "data_submissao_trabalho", nullable=false)
    private Date dataSubmissaoTrabalho;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataUltimaAtualizacaoTrabalho;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataSubmissaoVersaoFinal;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataUltimaAtualizacaoVersaoFinal;
    private Usuario usuario1;
    private Usuario usuario2;
    private Usuario usuario3;
    private String comentariosResumo1;
    private String comentariosResumo2;
    private String comentariosResumo3;
    private String statusResumo1;
    private String statusResumo2;
    private String statusResumo3;
    private String statusResumo;
    private boolean emailAceitacaoResumo;
    private String comentariosTrabalho1;
    private String comentariosTrabalho2;
    private String comentariosTrabalho3;
    private String statusTrabalho1;
    private String statusTrabalho2;
    private String statusTrabalho3;
    private String statusTrabalho;
    private boolean emailAceitacaoTrabalho;
    //Arquivos
    @Column(name = "trabalho", nullable=false)
    private byte[] trabalho;
    @Column(name = "file_trabalho", nullable=false)
    private String fileTrabalho;
    private String statusParticipante;
    private String loginUsuario1;
    private String loginUsuario2;
    private String loginUsuario3;
    private String nomeUsuario1;
    private String nomeUsuario2;
    private String nomeUsuario3;
    private String autores;
    private String nomeCategoria;
    private String notificacaoResumo;
    private String notificacaoTrabalho;
    private String comentariosResumo;
    private String comentariosTrabalho;
    private String statusRevisores;

    public Trabalho() {
        super();
        this.categoria = "";

        this.participante = null;

        this.titulo = "";

        this.primeiroAutorNome = "";
        this.primeiroautor_titulacao = "";
        this.primeiroautor_instituicao = "";
        this.primeiroautor_departamento = "";
        this.primeiroautor_unidade = "";
        this.primeiroautor_cidade = "";
        this.primeiroAutorEstado = "";
        this.primeiroAutorEmail = "";

        this.coautor1_nome = "";
        this.coautor1_titulacao = "";
        this.coautor1_instituicao = "";
        this.coautor1_departamento = "";
        this.coautor1_unidade = "";
        this.coautor1_cidade = "";
        this.coautor1_estado = "";
        this.coautor1_email = "";

        this.coautor2_nome = "";
        this.coautor2_titulacao = "";
        this.coautor2_instituicao = "";
        this.coautor2_departamento = "";
        this.coautor2_unidade = "";
        this.coautor2_cidade = "";
        this.coautor2_estado = "";
        this.coautor2_email = "";

        this.orientador_nome = "";
        this.orientador_titulacao = "";
        this.orientador_instituicao = "";
        this.orientador_departamento = "";
        this.orientador_unidade = "";
        this.orientador_cidade = "";
        this.orientador_estado = "";
        this.orientador_email = "";

        this.resumo = "";
        this.palavrasChave = "";

        this.dataSubmissaoResumo = null;
        this.dataUltimaAtualizacaoResumo = null;

        this.dataSubmissaoTrabalho = null;
        this.dataUltimaAtualizacaoTrabalho = null;

        this.dataSubmissaoVersaoFinal = null;
        this.dataUltimaAtualizacaoVersaoFinal = null;

        this.usuario1 = null;
        this.usuario2 = null;
        this.usuario3 = null;

        this.comentariosResumo1 = "";
        this.comentariosResumo2 = "";
        this.comentariosResumo3 = "";

        this.comentariosTrabalho1 = "";
        this.comentariosTrabalho2 = "";
        this.comentariosTrabalho3 = "";

        //Arquivos
        this.trabalho = null;

        this.fileTrabalho = "";

        this.statusParticipante = "";
        this.loginUsuario1 = "";
        this.loginUsuario2 = "";
        this.loginUsuario3 = "";
        this.nomeUsuario1 = "";
        this.nomeUsuario2 = "";
        this.nomeUsuario3 = "";
        this.autores = "";
        this.nomeCategoria = "";
        this.notificacaoResumo = "";
        this.notificacaoTrabalho = "";
        this.comentariosResumo = "";
        this.comentariosTrabalho = "";

        this.statusRevisores = "";

        setEmailAceitacaoResumo(false);
        setEmailAceitacaoTrabalho(false);

        setStatusResumo1(Constantes.AVALIANDO);
        setStatusResumo2(Constantes.AVALIANDO);
        setStatusResumo3(Constantes.AVALIANDO);

        setStatusResumo(Constantes.AVALIANDO);

        setStatusTrabalho1(Constantes.AVALIANDO);
        setStatusTrabalho2(Constantes.AVALIANDO);
        setStatusTrabalho3(Constantes.AVALIANDO);

        setStatusTrabalho(Constantes.AVALIANDO);
    }

    @Override
    public Integer getId() {
        return id;
    }

    @Override
    public void setId(Integer id) {
        this.id = id;
    }

    public String getCategoria() {
        return categoria;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }
    
    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

    public Participante getParticipante() {
        return participante;
    }

    public void setParticipante(Participante participante) {
        this.participante = participante;
    }

    /**
     * @hibernate.property
     */
    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    /**
     * @hibernate.property
     */
    public String getPrimeiroAutorNome() {
        return primeiroAutorNome;
    }

    public void setPrimeiroAutorNome(String primeiroAutorNome) {
        this.primeiroAutorNome = primeiroAutorNome;
    }

    /**
     * @hibernate.property
     */
    public String getPrimeiroautor_titulacao() {
        return primeiroautor_titulacao;
    }

    public void setPrimeiroautor_titulacao(String primeiroautor_titulacao) {
        this.primeiroautor_titulacao = primeiroautor_titulacao;
    }

    /**
     * @hibernate.property
     */
    public String getPrimeiroautor_instituicao() {
        return primeiroautor_instituicao;
    }

    public void setPrimeiroautor_instituicao(String primeiroautor_instituicao) {
        this.primeiroautor_instituicao = primeiroautor_instituicao;
    }

    /**
     * @hibernate.property
     */
    public String getPrimeiroautor_departamento() {
        return primeiroautor_departamento;
    }

    public void setPrimeiroautor_departamento(String primeiroautor_departamento) {
        this.primeiroautor_departamento = primeiroautor_departamento;
    }

    /**
     * @hibernate.property
     */
    public String getPrimeiroautor_unidade() {
        return primeiroautor_unidade;
    }

    public void setPrimeiroautor_unidade(String primeiroautor_unidade) {
        this.primeiroautor_unidade = primeiroautor_unidade;
    }

    /**
     * @hibernate.property
     */
    public String getPrimeiroautor_cidade() {
        return primeiroautor_cidade;
    }

    public void setPrimeiroautor_cidade(String primeiroautor_cidade) {
        this.primeiroautor_cidade = primeiroautor_cidade;
    }

    /**
     * @hibernate.property
     */
    public String getPrimeiroAutorEstado() {
        return primeiroAutorEstado;
    }

    public void setPrimeiroAutorEstado(String primeiroAutorEstado) {
        this.primeiroAutorEstado = primeiroAutorEstado;
    }

    /**
     * @hibernate.property
     */
    public String getPrimeiroAutorEmail() {
        return primeiroAutorEmail;
    }

    public void setPrimeiroAutorEmail(String primeiroAutorEmail) {
        this.primeiroAutorEmail = primeiroAutorEmail;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor1_nome() {
        return coautor1_nome;
    }

    public void setCoautor1_nome(String coautor1_nome) {
        this.coautor1_nome = coautor1_nome;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor1_titulacao() {
        return coautor1_titulacao;
    }

    public void setCoautor1_titulacao(String coautor1_titulacao) {
        this.coautor1_titulacao = coautor1_titulacao;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor1_instituicao() {
        return coautor1_instituicao;
    }

    public void setCoautor1_instituicao(String coautor1_instituicao) {
        this.coautor1_instituicao = coautor1_instituicao;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor1_departamento() {
        return coautor1_departamento;
    }

    public void setCoautor1_departamento(String coautor1_departamento) {
        this.coautor1_departamento = coautor1_departamento;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor1_unidade() {
        return coautor1_unidade;
    }

    public void setCoautor1_unidade(String coautor1_unidade) {
        this.coautor1_unidade = coautor1_unidade;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor1_cidade() {
        return coautor1_cidade;
    }

    public void setCoautor1_cidade(String coautor1_cidade) {
        this.coautor1_cidade = coautor1_cidade;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor1_estado() {
        return coautor1_estado;
    }

    public void setCoautor1_estado(String coautor1_estado) {
        this.coautor1_estado = coautor1_estado;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor1_email() {
        return coautor1_email;
    }

    public void setCoautor1_email(String coautor1_email) {
        this.coautor1_email = coautor1_email;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor2_nome() {
        return coautor2_nome;
    }

    public void setCoautor2_nome(String coautor2_nome) {
        this.coautor2_nome = coautor2_nome;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor2_titulacao() {
        return coautor2_titulacao;
    }

    public void setCoautor2_titulacao(String coautor2_titulacao) {
        this.coautor2_titulacao = coautor2_titulacao;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor2_instituicao() {
        return coautor2_instituicao;
    }

    public void setCoautor2_instituicao(String coautor2_instituicao) {
        this.coautor2_instituicao = coautor2_instituicao;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor2_departamento() {
        return coautor2_departamento;
    }

    public void setCoautor2_departamento(String coautor2_departamento) {
        this.coautor2_departamento = coautor2_departamento;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor2_unidade() {
        return coautor2_unidade;
    }

    public void setCoautor2_unidade(String coautor2_unidade) {
        this.coautor2_unidade = coautor2_unidade;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor2_cidade() {
        return coautor2_cidade;
    }

    public void setCoautor2_cidade(String coautor2_cidade) {
        this.coautor2_cidade = coautor2_cidade;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor2_estado() {
        return coautor2_estado;
    }

    public void setCoautor2_estado(String coautor2_estado) {
        this.coautor2_estado = coautor2_estado;
    }

    /**
     * @hibernate.property
     */
    public String getCoautor2_email() {
        return coautor2_email;
    }

    public void setCoautor2_email(String coautor2_email) {
        this.coautor2_email = coautor2_email;
    }

    /**
     * @hibernate.property
     */
    public String getOrientador_nome() {
        return orientador_nome;
    }

    public void setOrientador_nome(String orientador_nome) {
        this.orientador_nome = orientador_nome;
    }

    /**
     * @hibernate.property
     */
    public String getOrientador_titulacao() {
        return orientador_titulacao;
    }

    public void setOrientador_titulacao(String orientador_titulacao) {
        this.orientador_titulacao = orientador_titulacao;
    }

    /**
     * @hibernate.property
     */
    public String getOrientador_instituicao() {
        return orientador_instituicao;
    }

    public void setOrientador_instituicao(String orientador_instituicao) {
        this.orientador_instituicao = orientador_instituicao;
    }

    /**
     * @hibernate.property
     */
    public String getOrientador_departamento() {
        return orientador_departamento;
    }

    public void setOrientador_departamento(String orientador_departamento) {
        this.orientador_departamento = orientador_departamento;
    }

    /**
     * @hibernate.property
     */
    public String getOrientador_unidade() {
        return orientador_unidade;
    }

    public void setOrientador_unidade(String orientador_unidade) {
        this.orientador_unidade = orientador_unidade;
    }

    /**
     * @hibernate.property
     */
    public String getOrientador_cidade() {
        return orientador_cidade;
    }

    public void setOrientador_cidade(String orientador_cidade) {
        this.orientador_cidade = orientador_cidade;
    }

    /**
     * @hibernate.property
     */
    public String getOrientador_estado() {
        return orientador_estado;
    }

    public void setOrientador_estado(String orientador_estado) {
        this.orientador_estado = orientador_estado;
    }

    /**
     * @hibernate.property
     */
    public String getOrientador_email() {
        return orientador_email;
    }

    public void setOrientador_email(String orientador_email) {
        this.orientador_email = orientador_email;
    }

    /**
     * @hibernate.property
     * @hibernate.column name="resumo" sql-type="text"
     */
    public String getResumo() {
        return resumo;
    }

    public void setResumo(String resumo) {
        this.resumo = resumo;
    }

    /**
     * @hibernate.property
     */
    public String getPalavrasChave() {
        return palavrasChave;
    }

    public void setPalavrasChave(String palavrasChave) {
        this.palavrasChave = palavrasChave;
    }

    /**
     * @hibernate.property
     */
    public Date getDataSubmissaoResumo() {
        return dataSubmissaoResumo;
    }

    public void setDataSubmissaoResumo(Date dataSubmissaoResumo) {
        this.dataSubmissaoResumo = dataSubmissaoResumo;
    }

    /**
     * @hibernate.property
     */
    public Date getDataUltimaAtualizacaoResumo() {
        return dataUltimaAtualizacaoResumo;
    }

    public void setDataUltimaAtualizacaoResumo(Date dataUltimaAtualizacaoResumo) {
        this.dataUltimaAtualizacaoResumo = dataUltimaAtualizacaoResumo;
    }

    /**
     * @hibernate.property
     */
    public Date getDataSubmissaoTrabalho() {
        return dataSubmissaoTrabalho;
    }

    public void setDataSubmissaoTrabalho(Date dataSubmissaoTrabalho) {
        this.dataSubmissaoTrabalho = dataSubmissaoTrabalho;
    }

    /**
     * @hibernate.property
     */
    public Date getDataUltimaAtualizacaoTrabalho() {
        return dataUltimaAtualizacaoTrabalho;
    }

    public void setDataUltimaAtualizacaoTrabalho(Date dataUltimaAtualizacaoTrabalho) {
        this.dataUltimaAtualizacaoTrabalho = dataUltimaAtualizacaoTrabalho;
    }

    /**
     * @hibernate.property
     */
    public Date getDataSubmissaoVersaoFinal() {
        return dataSubmissaoVersaoFinal;
    }

    public void setDataSubmissaoVersaoFinal(Date dataSubmissaoVersaoFinal) {
        this.dataSubmissaoVersaoFinal = dataSubmissaoVersaoFinal;
    }

    /**
     * @hibernate.property
     */
    public Date getDataUltimaAtualizacaoVersaoFinal() {
        return dataUltimaAtualizacaoVersaoFinal;
    }

    public void setDataUltimaAtualizacaoVersaoFinal(
            Date dataUltimaAtualizacaoVersaoFinal) {
        this.dataUltimaAtualizacaoVersaoFinal = dataUltimaAtualizacaoVersaoFinal;
    }

    /**
     * @hibernate.property
     * @hibernate.column name="comentariosResumo1" sql-type="text"
     */
    public String getComentariosResumo1() {
        return comentariosResumo1;
    }

    public void setComentariosResumo1(String comentariosResumo1) {
        this.comentariosResumo1 = comentariosResumo1;
    }

    /**
     * @hibernate.property
     * @hibernate.column name="comentariosResumo2" sql-type="text"
     */
    public String getComentariosResumo2() {
        return comentariosResumo2;
    }

    public void setComentariosResumo2(String comentariosResumo2) {
        this.comentariosResumo2 = comentariosResumo2;
    }

    /**
     * @hibernate.property
     * @hibernate.column name="comentariosResumo3" sql-type="text"
     */
    public String getComentariosResumo3() {
        return comentariosResumo3;
    }

    public void setComentariosResumo3(String comentariosResumo3) {
        this.comentariosResumo3 = comentariosResumo3;
    }

    /**
     * @hibernate.property
     */
    public String getStatusResumo1() {
        return statusResumo1;
    }

    public void setStatusResumo1(String statusResumo1) {
        this.statusResumo1 = statusResumo1;
    }

    /**
     * @hibernate.property
     */
    public String getStatusResumo2() {
        return statusResumo2;
    }

    public void setStatusResumo2(String statusResumo2) {
        this.statusResumo2 = statusResumo2;
    }

    /**
     * @hibernate.property
     */
    public String getStatusResumo3() {
        return statusResumo3;
    }

    public void setStatusResumo3(String statusResumo3) {
        this.statusResumo3 = statusResumo3;
    }

    /**
     * @hibernate.property
     */
    public String getStatusResumo() {
        return statusResumo;
    }

    public void setStatusResumo(String statusResumo) {
        this.statusResumo = statusResumo;
    }

    /**
     * @hibernate.property
     */
    public boolean getEmailAceitacaoResumo() {
        return emailAceitacaoResumo;
    }

    public void setEmailAceitacaoResumo(boolean emailAceitacaoResumo) {
        this.emailAceitacaoResumo = emailAceitacaoResumo;
    }

    /**
     * @hibernate.property
     * @hibernate.column name="comentariosTrabalho1" sql-type="text"
     */
    public String getComentariosTrabalho1() {
        return comentariosTrabalho1;
    }

    public void setComentariosTrabalho1(String comentariosTrabalho1) {
        this.comentariosTrabalho1 = comentariosTrabalho1;
    }

    /**
     * @hibernate.property
     * @hibernate.column name="comentariosTrabalho2" sql-type="text"
     */
    public String getComentariosTrabalho2() {
        return comentariosTrabalho2;
    }

    public void setComentariosTrabalho2(String comentariosTrabalho2) {
        this.comentariosTrabalho2 = comentariosTrabalho2;
    }

    /**
     * @hibernate.property
     * @hibernate.column name="comentariosTrabalho3" sql-type="text"
     */
    public String getComentariosTrabalho3() {
        return comentariosTrabalho3;
    }

    public void setComentariosTrabalho3(String comentariosTrabalho3) {
        this.comentariosTrabalho3 = comentariosTrabalho3;
    }

    /**
     * @hibernate.property
     */
    public String getStatusTrabalho1() {
        return statusTrabalho1;
    }

    public void setStatusTrabalho1(String statusTrabalho1) {
        this.statusTrabalho1 = statusTrabalho1;
    }

    /**
     * @hibernate.property
     */
    public String getStatusTrabalho2() {
        return statusTrabalho2;
    }

    public void setStatusTrabalho2(String statusTrabalho2) {
        this.statusTrabalho2 = statusTrabalho2;
    }

    /**
     * @hibernate.property
     */
    public String getStatusTrabalho3() {
        return statusTrabalho3;
    }

    public void setStatusTrabalho3(String statusTrabalho3) {
        this.statusTrabalho3 = statusTrabalho3;
    }

    /**
     * @hibernate.property
     */
    public String getStatusTrabalho() {
        return statusTrabalho;
    }

    public void setStatusTrabalho(String statusTrabalho) {
        this.statusTrabalho = statusTrabalho;
    }

    /**
     * @hibernate.property
     */
    public boolean getEmailAceitacaoTrabalho() {
        return emailAceitacaoTrabalho;
    }

    public void setEmailAceitacaoTrabalho(boolean emailAceitacaoTrabalho) {
        this.emailAceitacaoTrabalho = emailAceitacaoTrabalho;
    }

    /**
     * @hibernate.property
     * @return
     */
    public String getFileTrabalho() {
        return fileTrabalho;
    }

    /**
     * Altera o nome do arquivo que contém a estrutura do padrão. A estrutura refere-se aos
     * modelos independentes de plataforma.
     * @param estrutura O novo arquivo
     */
    public void setFileTrabalho(String fileTrabalho) {
        this.fileTrabalho = fileTrabalho;
    }

    /**
     * @hibernate.property
     * @hibernate.column name="trabalho" sql-type="bytea"
     */
    public byte[] getTrabalho() {
        return trabalho;
    }

    public void setTrabalho(byte[] trabalho) {
        this.trabalho = trabalho;
    }

    public String getAutores() {
        String autores = primeiroAutorNome.toUpperCase() + " (primeiro-autor)";
        if (!coautor1_nome.equalsIgnoreCase("")) {
            autores = autores + ", " + coautor1_nome.toUpperCase() + " (primeiro co-autor)";
        }
        if (!coautor2_nome.equalsIgnoreCase("")) {
            autores = autores + ", " + coautor2_nome.toUpperCase() + " (segundo co-autor)";
        }
        if (!orientador_nome.equalsIgnoreCase("")) {
            autores = autores + ", " + orientador_nome.toUpperCase() + " (orientador)";
        }
        autores = autores + ".";
        return autores;
    }

    /* (non-Javadoc)
     * @see java.lang.Comparable#compareTo(java.lang.Object)
     */
    @Override
    public int compareTo(Object arg0) {
        Trabalho other = (Trabalho) arg0;
        return this.getTitulo().compareTo(other.getTitulo());
    }
}
